本文整理汇总了Golang中github.com/gonet2/libs/nsq-logger.Critical函数的典型用法代码示例。如果您正苦于以下问题:Golang Critical函数的具体用法?Golang Critical怎么用?Golang Critical使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Critical函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: init
func (ns *numbers) init(path string) {
ns.tables = make(map[string]*table)
client := etcdclient.GetClient()
defer func() {
client.Close()
}()
resp, err := client.Get(path, false, false)
if err != nil {
log.Critical(err)
return
}
// 解码xlsx
xlsx_bin, err := base64.StdEncoding.DecodeString(resp.Node.Value)
if err != nil {
log.Critical(err)
return
}
// 读取xlsx
xlsx_reader, err := xlsx.OpenBinary(xlsx_bin)
if err != nil {
log.Critical(err)
return
}
ns.parse(xlsx_reader.Sheets)
}
示例2: init_machine_id
func (s *server) init_machine_id() {
client := <-s.client_pool
defer func() { s.client_pool <- client }()
for {
// get the key
resp, err := client.Get(context.Background(), UUID_KEY, nil)
if err != nil {
log.Critical(err)
os.Exit(-1)
}
// get prevValue & prevIndex
prevValue, err := strconv.Atoi(resp.Node.Value)
if err != nil {
log.Critical(err)
os.Exit(-1)
}
prevIndex := resp.Node.ModifiedIndex
// CompareAndSwap
resp, err = client.Set(context.Background(), UUID_KEY, fmt.Sprint(prevValue+1), &etcd.SetOptions{PrevIndex: prevIndex})
if err != nil {
cas_delay()
continue
}
// record serial number of this service, already shifted
s.machine_id = (uint64(prevValue+1) & MACHINE_ID_MASK) << 12
return
}
}
示例3: P_get_seed_req
// 密钥交换
func P_get_seed_req(sess *Session, reader *packet.Packet) []byte {
tbl, _ := PKT_seed_info(reader)
// KEY1
X1, E1 := dh.DHExchange()
KEY1 := dh.DHKey(X1, big.NewInt(int64(tbl.F_client_send_seed)))
// KEY2
X2, E2 := dh.DHExchange()
KEY2 := dh.DHKey(X2, big.NewInt(int64(tbl.F_client_receive_seed)))
ret := seed_info{int32(E1.Int64()), int32(E2.Int64())}
// 服务器加密种子是客户端解密种子
encoder, err := rc4.NewCipher([]byte(fmt.Sprintf("%v%v", SALT, KEY2)))
if err != nil {
log.Critical(err)
return nil
}
decoder, err := rc4.NewCipher([]byte(fmt.Sprintf("%v%v", SALT, KEY1)))
if err != nil {
log.Critical(err)
return nil
}
sess.Encoder = encoder
sess.Decoder = decoder
sess.Flag |= SESS_KEYEXCG
return packet.Pack(Code["get_seed_ack"], ret, nil)
}
示例4: SaveFile
//---------------------------------------------------------- 产生GridFS文件
func SaveFile(filename string, buf []byte) bool {
ms := _global_ms.Copy()
defer ms.Close()
gridfs := ms.DB("").GridFS("fs")
// 首先删除同名文件
err := gridfs.Remove(filename)
if err != nil {
log.Critical("gridfs", filename, err)
return false
}
// 产生新文件
file, err := gridfs.Create(filename)
if err != nil {
log.Critical("gridfs", filename, err)
return false
}
n, err := file.Write(buf)
if err != nil {
log.Critical("gridfs", filename, n, err)
return false
}
err = file.Close()
if err != nil {
log.Critical("gridfs", filename, err)
return false
}
log.Info("gridfs", filename, "saved to GridFS!!")
return true
}
示例5: init
func (arch *Archiver) init() {
arch.pending = make(chan []byte)
arch.stop = make(chan bool)
cfg := nsq.NewConfig()
consumer, err := nsq.NewConsumer(TOPIC, CHANNEL, cfg)
if err != nil {
log.Critical(err)
os.Exit(-1)
}
// message process
consumer.AddHandler(nsq.HandlerFunc(func(msg *nsq.Message) error {
arch.pending <- msg.Body
return nil
}))
// read environtment variable
addresses := []string{DEFAULT_NSQLOOKUPD}
if env := os.Getenv(ENV_NSQLOOKUPD); env != "" {
addresses = strings.Split(env, ";")
}
// connect to nsqlookupd
log.Trace("connect to nsqlookupds ip:", addresses)
if err := consumer.ConnectToNSQLookupds(addresses); err != nil {
log.Critical(err)
return
}
log.Info("nsqlookupd connected")
go arch.archive_task()
}
示例6: Next
// get next value of a key, like auto-increment in mysql
func (s *server) Next(ctx context.Context, in *pb.Snowflake_Key) (*pb.Snowflake_Value, error) {
client := <-s.client_pool
defer func() { s.client_pool <- client }()
key := PATH + in.Name
for {
// get the key
resp, err := client.Get(context.Background(), key, nil)
if err != nil {
log.Critical(err)
return nil, errors.New("Key not exists, need to create first")
}
// get prevValue & prevIndex
prevValue, err := strconv.Atoi(resp.Node.Value)
if err != nil {
log.Critical(err)
return nil, errors.New("marlformed value")
}
prevIndex := resp.Node.ModifiedIndex
// CompareAndSwap
resp, err = client.Set(context.Background(), key, fmt.Sprint(prevValue+1), &etcd.SetOptions{PrevIndex: prevIndex})
if err != nil {
cas_delay()
continue
}
return &pb.Snowflake_Value{int64(prevValue + 1)}, nil
}
}
示例7: Next
// get next value of a key, like auto-increment in mysql
func (s *server) Next(ctx context.Context, in *pb.Snowflake_Key) (*pb.Snowflake_Value, error) {
client := s.client_pool.Get().(*etcd.Client)
defer func() {
s.client_pool.Put(client)
}()
key := PATH + in.Name
for i := 0; i < RETRY_MAX; i++ {
// get the key
resp, err := client.Get(key, false, false)
if err != nil {
log.Critical(err)
return nil, errors.New("Key not exists, need to create first")
}
// get prevValue & prevIndex
prevValue, err := strconv.Atoi(resp.Node.Value)
if err != nil {
log.Critical(err)
return nil, errors.New("marlformed value")
}
prevIndex := resp.Node.ModifiedIndex
// CAS
resp, err = client.CompareAndSwap(key, fmt.Sprint(prevValue+1), 0, resp.Node.Value, prevIndex)
if err != nil {
log.Error(err)
<-time.After(RETRY_DELAY)
continue
}
return &pb.Snowflake_Value{int64(prevValue + 1)}, nil
}
return nil, errors.New("etcd server busy")
}
示例8: restore
func (s *server) restore() {
// restore data from db file
db := s.open_db()
defer db.Close()
count := 0
db.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(BOLTDB_BUCKET))
b.ForEach(func(k, v []byte) error {
var msg []Chat_Message
err := msgpack.Unmarshal(v, &msg)
if err != nil {
log.Critical("chat data corrupted:", err)
os.Exit(-1)
}
id, err := strconv.ParseUint(string(k), 0, 64)
if err != nil {
log.Critical("chat data corrupted:", err)
os.Exit(-1)
}
ep := NewEndPoint()
ep.inbox = msg
s.eps[id] = ep
count++
return nil
})
return nil
})
log.Infof("restored %v chats", count)
}
示例9: dump
func (s *server) dump(db *bolt.DB, changes map[uint64]bool) {
db.Update(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(BOLTDB_BUCKET))
for k := range changes {
ep := s.read_ep(k)
if ep == nil {
log.Errorf("cannot find endpoint %v", k)
continue
}
// serialization and save
bin, err := msgpack.Marshal(ep.Read())
if err != nil {
log.Critical("cannot marshal:", err)
continue
}
err = b.Put([]byte(fmt.Sprint(k)), bin)
if err != nil {
log.Critical(err)
continue
}
}
return nil
})
}
示例10: P_user_login_req
// 玩家登陆过程
func P_user_login_req(sess *Session, reader *packet.Packet) []byte {
// TODO: 登陆鉴权
sess.UserId = 1
// TODO: 选择登陆服务器
sess.GSID = DEFAULT_GSID
// 选服
cli, err := sp.GetServiceWithId(sp.SERVICE_GAME, sess.GSID)
if err != nil {
log.Critical(err)
return nil
}
// type assertion
game_cli, ok := cli.(spp.GameServiceClient)
if !ok {
log.Critical("cannot do type assertion on: %v", sess.GSID)
return nil
}
// 开启到游戏服的流
// TODO: 处理context,设定超时
stream, err := game_cli.Stream(context.Background())
if err != nil {
log.Critical(err)
return nil
}
sess.Stream = stream
// 在game注册
// TODO: 新用户的创建由game处理
sess.Stream.Send(&spp.Game_Frame{Type: spp.Game_Register, UserId: sess.UserId})
// 读取GAME返回消息
fetcher_task := func(sess *Session) {
for {
in, err := sess.Stream.Recv()
if err == io.EOF { // 流关闭
log.Trace(err)
return
}
if err != nil {
log.Error(err)
return
}
sess.MQ <- *in
}
}
go fetcher_task(sess)
return packet.Pack(Code["user_login_ack"], user_snapshot{F_uid: sess.UserId}, nil)
}
示例11: Set
func (s *db) Set(tbl string, uid int32, data interface{}) error {
bin, err := msgpack.Marshal(data)
if err != nil {
log.Critical(err)
return err
}
_, err = s.redis_client.Cmd("SET", Key(tbl, uid), bin).Str()
if err != nil {
log.Critical(err)
return err
}
return nil
}
示例12: Get
func (s *db) Get(tbl string, uid int32, data interface{}) error {
raw, err := s.redis_client.Cmd("GET", Key(tbl, uid)).Bytes()
if err != nil {
log.Critical(err)
return err
}
// unpack message from msgpack format
err = msgpack.Unmarshal(raw, &data)
if err != nil {
log.Critical(err)
return err
}
return nil
}
示例13: P_user_login_req
// 玩家登陆过程
func P_user_login_req(sess *Session, reader *packet.Packet) []byte {
// TODO: 登陆鉴权
sess.UserId = 1
// TODO: 选择登陆服务器
sess.GSID = DEFAULT_GSID
// 选服
conn := sp.GetServiceWithId(sp.DEFAULT_SERVICE_PATH+"/game", sess.GSID)
if conn == nil {
log.Critical("cannot get game service:", sess.GSID)
return nil
}
cli := pb.NewGameServiceClient(conn)
// 开启到游戏服的流
// TODO: 处理context,设定超时
stream, err := cli.Stream(context.Background())
if err != nil {
log.Critical(err)
return nil
}
sess.Stream = stream
// 在game注册
// TODO: 新用户的创建由game处理
sess.Stream.Send(&pb.Game_Frame{Type: pb.Game_Register, UserId: sess.UserId})
// 读取GAME返回消息
fetcher_task := func(sess *Session) {
for {
in, err := sess.Stream.Recv()
if err == io.EOF { // 流关闭
log.Trace(err)
return
}
if err != nil {
log.Error(err)
return
}
select {
case sess.MQ <- *in:
case <-sess.Die:
}
}
}
go fetcher_task(sess)
return packet.Pack(Code["user_login_succeed_ack"], S_user_snapshot{F_uid: sess.UserId}, nil)
}
示例14: recv
// stream receiver
func (s *server) recv(stream GameService_StreamServer) chan *Game_Frame {
ch := make(chan *Game_Frame, 1)
go func() {
for {
in, err := stream.Recv()
if err == io.EOF { // client closed
close(ch)
return
}
if err != nil {
log.Critical(err)
close(ch)
return
}
select {
case ch <- in:
case <-time.After(RECV_TIMEOUT):
log.Warning("recv deliver timeout")
close(ch)
return
}
}
}()
return ch
}
示例15: recv
// stream receiver
func (s *server) recv(stream GameService_StreamServer, sess_die chan struct{}) chan *Game_Frame {
ch := make(chan *Game_Frame, 1)
go func() {
defer func() {
close(ch)
}()
for {
in, err := stream.Recv()
if err == io.EOF { // client closed
return
}
if err != nil {
log.Critical(err)
return
}
select {
case ch <- in:
case <-sess_die:
return
}
}
}()
return ch
}