| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package main
- import (
- "git.wanbits.io/joe/franklin/mod"
- pb "git.wanbits.io/joe/franklin/protos"
- "git.wanbits.io/joe/nnet"
- "github.com/golang/protobuf/proto"
- "time"
- )
- var (
- routes = map[string]fnCSHandler{
- "C_Heartbeat": on_C_Heartbeat,
- "C_Login": on_C_Login,
- "C_Logout": on_C_Logout,
- "C_EnterGame": on_C_EnterGame,
- "C_LeaveGame": on_C_LeaveGame,
- "C_EnterRoom": on_C_EnterRoom,
- "C_EnterTable": on_C_EnterTable,
- "C_LeaveRoom": on_C_LeaveRoom,
- "C_LeaveTable": on_C_LeaveTable,
- }
- )
- type fnCSHandler func(nnet.ISession, *CSPacket)
- func dispatch(ses nnet.ISession, pkt *CSPacket) {
- handler, ok := routes[pkt.MsgName]
- if !ok {
- return
- }
- handler(ses, pkt)
- }
- func on_C_Heartbeat(ses nnet.ISession, p *CSPacket) {
- resp := &pb.S_Heartbeat{
- Ts: time.Now().Unix(),
- }
- SendToClient(ses, ses.Id(), pb.ErrCode_OK, resp)
- }
- func on_C_Login(ses nnet.ISession, p *CSPacket) {
- prm := &pb.C_Login{}
- ses.SetId(p.UserId)
- err := proto.Unmarshal(p.Req, prm)
- if err != nil {
- response_c_login(ses, pb.ErrCode_BAD_FORMAT, nil)
- return
- }
- // verify by rabbit
- seq := time.Now().UnixNano()
- err = g_rabbitProto.Send(NewReqPacket("bl_login_verify", seq, &pb.VerifyParams{
- UserId: p.UserId,
- Username: prm.Username,
- Token: prm.Token,
- }), ses)
- if err != nil {
- response_c_login(ses, pb.ErrCode_FAILED, nil)
- }
- }
- func response_c_login(ses nnet.ISession, errCode pb.ErrCode, res *pb.S_Login) {
- var ec = pb.ErrCode_OK
- var reason = pb.NetCloseReason_KICK
- defer func() {
- p := []int32{}
- if ec != pb.ErrCode_OK {
- p = append(p, 1)
- p = append(p, int32(reason))
- res = &pb.S_Login{}
- //SendToClient(ses, ses.Id(), ec, &pb.S_Login{})
- //KillUserSession(ses, ses.Id(), pb.NetCloseReason_ERR_AUTH)
- }
- SendToClient(ses, ses.Id(), ec, res, p...)
- }()
- if errCode != pb.ErrCode_OK {
- ec = errCode
- reason = pb.NetCloseReason_ERR_AUTH
- return
- }
- // check agent offline
- if g_offline {
- ec = pb.ErrCode_MAINTAINING
- reason = pb.NetCloseReason_KICK
- return
- }
- // check user status
- // check user kicked off
- if mod.LoadKick(ses.Id()) {
- ec = pb.ErrCode_FORBIDDEN
- reason = pb.NetCloseReason_KICK
- return
- }
- // check if have logged in any agents already
- // check reconnect state
- // route to a lobby
- // update user location
- // update session id
- ses.UpdateId(ses.Id())
- }
- func on_C_Logout(ses nnet.ISession, p *CSPacket) {
- //
- }
- func on_C_EnterGame(ses nnet.ISession, p *CSPacket) {
- }
- func on_C_LeaveGame(ses nnet.ISession, p *CSPacket) {
- }
- func on_C_EnterRoom(ses nnet.ISession, p *CSPacket) {
- }
- func on_C_EnterTable(ses nnet.ISession, p *CSPacket) {
- }
- func on_C_LeaveRoom(ses nnet.ISession, p *CSPacket) {
- }
- func on_C_LeaveTable(ses nnet.ISession, p *CSPacket) {
- }
|