Example #1
0
    /// <summary>
    /// 发送消息
    /// </summary>
    /// <param name="message"></param>
    /// <param name="cmd"></param>
    /// <returns></returns>
    private Package.Types.Frame SendMsg(ByteString message, UInt32 cmd)
    {
        var request = new Package.Types.Frame()
        {
            Type     = Package.Types.FrameType.LeagueMessage,
            Version  = 2,
            CmdId    = cmd,
            UserId   = userID,
            Reserved = GetReverse(),
            Message  = message
        };
        ByteString req = ByteUtils.ObjectToByteString(request);

        Package.Types.Frame reply = new Package.Types.Frame();
        try
        {
            IPAddress  address = Dns.GetHostEntry(remoteHost).AddressList[0];
            IPEndPoint sender  = new IPEndPoint(address, remotePort);
            UdpClient  sock    = new UdpClient();

            sock.Send(req.ToByteArray(), req.Length, sender);
            sock.Client.ReceiveTimeout = 100;
            byte[] rsp = sock.Receive(ref sender);
            ByteUtils.ByteStringToObject(reply, ByteString.CopyFrom(rsp));
            sock.Close();
        }
        catch (Exception e)
        {
            Logger.Warn("Send message error: {0}", e.ToString());
            return(null);
        }
        return(reply);
    }
Example #2
0
        public async Task OnHotelBroadCast()
        {
            try
            {
                SendMessage send = new SendMessage
                {
                    UserID = 11,
                    Msg    = 1,
                };
                HotelBroadcast broadcast = new HotelBroadcast()
                {
                    UserID = 11,
                    GameID = 12,
                    RoomID = 13,
                    //CpProto = Google.Protobuf.ByteString.CopyFromUtf8("kickplayer|1588649253385801743,200945,200945"),
                    //CpProto = Google.Protobuf.ByteString.CopyFromUtf8(JsonConvert.SerializeObject(send)),
                    CpProto = Google.Protobuf.ByteString.CopyFromUtf8("getRoomDetail|158864,200945"),
                };
                Package.Types.Frame message = new Package.Types.Frame()
                {
                    Type     = Package.Types.FrameType.HotelServer,
                    Version  = 2,
                    CmdId    = (UInt32)HotelGsCmdID.HotelBroadcastCmdid,
                    UserId   = 1001,
                    Reserved = 100,
                    Message  = ObjectToByteString(broadcast)
                };
                using (var call = client.Stream(new Metadata {
                    { "ctx", "ctx" }, { "userid", "17" }
                }))
                {
                    var responseReaderTask = Task.Run(async() =>
                    {
                        while (await call.ResponseStream.MoveNext())
                        {
                            Package.Types.Frame note       = call.ResponseStream.Current;
                            HotelBroadcastAck broadcastAck = new HotelBroadcastAck();
                            ByteStringToObject(broadcastAck, note.Message);

                            Console.WriteLine("OnHotelBroadCast:receve msg userID:" + broadcastAck.UserID + " status:" + broadcastAck.Status);
                        }
                        Console.WriteLine("OnHotelBroadCast:response over");
                    });

                    Console.WriteLine("OnHotelBroadCast:send OnHotelBroadCast start");

                    await call.RequestStream.WriteAsync(message);

                    await call.RequestStream.CompleteAsync();

                    await responseReaderTask;
                }
            }
            catch (RpcException e)
            {
                Console.WriteLine("RPC failed", e);
                throw;
            }
        }
Example #3
0
        public async Task OnCreateRoom()
        {
            try
            {
                Request request = new Request()
                {
                    UserID = 62,
                    GameID = 32,
                    RoomID = 52,
                };
                CreateExtInfo createEx = new CreateExtInfo()
                {
                    UserID     = 62,
                    RoomID     = 52,
                    State      = 2,
                    CreateTime = 1223344,
                };
                request.CpProto = ObjectToByteString(createEx);

                Package.Types.Frame message = new Package.Types.Frame()
                {
                    Type     = Package.Types.FrameType.CpsService,
                    Version  = 2,
                    CmdId    = (UInt32)MvsGsCmdID.MvsCreateRoomReq,
                    UserId   = 1001,
                    Reserved = 100,
                    Message  = ObjectToByteString(request),
                };
                using (var call = client.Stream(new Metadata {
                    { "ctx", "ctx" }, { "userid", "13" }
                }))
                {
                    var responseReaderTask = Task.Run(async() =>
                    {
                        while (await call.ResponseStream.MoveNext())
                        {
                            var note    = call.ResponseStream.Current;
                            Reply reply = new Reply();
                            ByteStringToObject(reply, note.Message);
                            Console.WriteLine("OnCreateRoom:receve msg:" + GetReply(reply));
                        }
                        Console.WriteLine("OnCreateRoom:response over");
                    });

                    Console.WriteLine("OnCreateRoom:send OnCreateRoom start");

                    await call.RequestStream.WriteAsync(message);

                    await call.RequestStream.CompleteAsync();

                    await responseReaderTask;
                }
            }
            catch (RpcException e)
            {
                Console.WriteLine("RPC failed", e);
                throw;
            }
        }
 /// <summary>
 /// 推送给MVS
 /// </summary>
 /// <param name="package"></param>
 /// <returns></returns>
 public async Task PushToMvs(Package.Types.Frame package)
 {
     try
     {
         await this.responseStream.WriteAsync(package);
     }
     catch (RpcException e)
     {
         Logger.Warn("Push to mvs err: {0}", e.Status);
     }
 }
Example #5
0
    /// <summary>
    /// 推送给指定的hotel
    /// </summary>
    /// <param name="roomID"></param>
    /// <param name="package"></param>
    /// <returns></returns>
    public async Task PushToHotel(UInt64 roomID, Package.Types.Frame package)
    {
        if (hotelMap.TryGetValue(roomID, out IServerStreamWriter <Package.Types.Frame> response))
        {
            Logger.Debug("PushToHotel roomID={0}", roomID);
            await response.WriteAsync(package);

            return;
        }

        Logger.Warn("PushToHotel failed, roomID={0}", roomID);
    }
Example #6
0
 /// <summary>
 /// 推送消息给Hotel
 /// </summary>
 /// <param name="msg"></param>
 public override void PushToHotel(UInt32 userID, UInt32 version, UInt64 roomID, UInt32 cmdID, IMessage msg)
 {
     Package.Types.Frame package = new Package.Types.Frame()
     {
         Type    = Package.Types.FrameType.PushMessage,
         Version = version,
         CmdId   = cmdID,
         UserId  = userID,
         Message = ByteUtils.ObjectToByteString(msg)
     };
     serverImp.PushToHotel(roomID, package).Wait();
 }
Example #7
0
    /// <summary>
    /// 消息打包
    /// </summary>
    /// <param name="message"></param>
    /// <param name="cmd"></param>
    /// <returns></returns>
    private Package.Types.Frame FrameMsg(ByteString message, UInt32 cmd)
    {
        var req = new Package.Types.Frame()
        {
            Type     = Package.Types.FrameType.LeagueMessage,
            Version  = 2,
            CmdId    = cmd,
            UserId   = userID,
            Reserved = GetReverse(),
            Message  = message
        };

        return(req);
    }
Example #8
0
        public async Task OnHotelCloseConnect()
        {
            try
            {
                CloseConnect closeconnect = new CloseConnect()
                {
                    GameID = 12,
                    RoomID = 13,
                };
                Package.Types.Frame message = new Package.Types.Frame()
                {
                    Type     = Package.Types.FrameType.HotelServer,
                    Version  = 2,
                    CmdId    = (UInt32)HotelGsCmdID.HotelCloseConnet,
                    UserId   = 1001,
                    Reserved = 100,
                    Message  = ObjectToByteString(closeconnect)
                };
                using (var call = client.Stream(new Metadata {
                    { "ctx", "ctx" }, { "userid", "16" }
                }))
                {
                    var responseReaderTask = Task.Run(async() =>
                    {
                        while (await call.ResponseStream.MoveNext())
                        {
                            Package.Types.Frame note        = call.ResponseStream.Current;
                            CloseConnectAck closeConnectAck = new CloseConnectAck();
                            ByteStringToObject(closeConnectAck, note.Message);

                            Console.WriteLine("OnHotelCloseConnect:receve msg status:" + closeConnectAck.Status);
                        }
                        Console.WriteLine("OnHotelCloseConnect:response over");
                    });

                    Console.WriteLine("OnHotelCloseConnect:send CloseconnectV32 start");

                    await call.RequestStream.WriteAsync(message);

                    await call.RequestStream.CompleteAsync();

                    await responseReaderTask;
                }
            }
            catch (RpcException e)
            {
                Console.WriteLine("RPC failed", e);
                throw;
            }
        }
 /// <summary>
 /// 推送给指定的hotel
 /// </summary>
 /// <param name="roomID"></param>
 /// <param name="package"></param>
 /// <returns></returns>
 public async Task PushToHotel(UInt64 roomID, Package.Types.Frame package)
 {
     try
     {
         if (hotelMap.TryGetValue(roomID, out IServerStreamWriter <Package.Types.Frame> response))
         {
             await response.WriteAsync(package);
         }
     }
     catch (RpcException e)
     {
         Logger.Warn("Push to hotel err: {0}", e.Status);
     }
 }
Example #10
0
    /// <summary>
    /// 发送消息
    /// </summary>
    /// <param name="message"></param>
    /// <param name="cmd"></param>
    /// <returns></returns>
    private Package.Types.Frame SendMsg(ByteString message, UInt32 cmd)
    {
        var request = new Package.Types.Frame()
        {
            Type     = Package.Types.FrameType.LeagueMessage,
            Version  = 2,
            CmdId    = cmd,
            UserId   = userID,
            Reserved = GetReverse(),
            Message  = message
        };

        Package.Types.Frame reply;
        try
        {
            reply = client.SimpleRequest(request);
        }
        catch (RpcException e)
        {
            Logger.Warn("Send message error: {0}", e.Status);
            return(null);
        }
        return(reply);
    }
Example #11
0
    public override async Task Stream(IAsyncStreamReader <Package.Types.Frame> requestStream, IServerStreamWriter <Package.Types.Frame> responseStream, ServerCallContext context)
    {
        if (GetMetadata(context, out uint userID, out string token) == false)
        {
            Logger.Error("Invalid connection");
            return;
        }
        baseServer.Connect(userID, token);

        try
        {
            while (await requestStream.MoveNext(CancellationToken.None))
            {
                Package.Types.Frame p = (Package.Types.Frame)requestStream.Current;
                var responseTask      = Task.Run(async() =>
                {
                    Package.Types.Frame rep = null;
                    if (p.CmdId == Gvalue.CmdHeartbeat)
                    {
                        rep = p;
                    }
                    else
                    {
                        if (p.CmdId == (UInt32)HotelGsCmdID.HotelCreateConnect ||
                            p.CmdId == (UInt32)HotelGsCmdID.HotelBroadcastCmdid ||
                            p.CmdId == (UInt32)HotelGsCmdID.HotelCloseConnet)
                        {
                            if (p.CmdId == (UInt32)HotelGsCmdID.HotelCreateConnect)
                            {
                                Connect connectInfo = Connect.Parser.ParseFrom(p.Message);
                                hotelMap.Add(connectInfo.RoomID, responseStream);
                            }
                        }
                        else
                        {
                            if (this.responseStream == null)    //MVS消息只用一个channel返回
                            {
                                this.responseStream = responseStream;
                            }
                        }
                        rep = baseServer.DealMsg(p);
                    }

                    if (rep != null)
                    {
                        await responseStream.WriteAsync(rep);
                    }
                });

                await responseTask;
            }
            Logger.Info("Rcv package over!");
        }
        catch (RpcException e)
        {
            Logger.Info("e:", e);
        }

        Logger.Info("requestTask over!");
        baseServer.Disconnect(userID, token);
    }
Example #12
0
 /// <summary>
 /// 推送给MVS
 /// </summary>
 /// <param name="package"></param>
 /// <returns></returns>
 public async Task PushToMvs(Package.Types.Frame package)
 {
     Logger.Debug("PushToMvs");
     await this.responseStream.WriteAsync(package);
 }
Example #13
0
    public override Package.Types.Frame DealMsg(Package.Types.Frame req)
    {
        Logger.Info("DealMsg, CmdID={0}, UserID={1}", req.CmdId, req.UserId);

        IMessage reply = null;

        Package.Types.Frame response = req;

        if (req.CmdId == (UInt32)HotelGsCmdID.HotelCreateConnect)
        {
            reply = msgHandler.OnHotelConnect(req.Message);
        }
        else if (req.CmdId == (UInt32)HotelGsCmdID.HotelBroadcastCmdid)
        {
            reply = msgHandler.OnHotelBroadCast(req.Message);
        }
        else if (req.CmdId == (UInt32)HotelGsCmdID.HotelCloseConnet)
        {
            reply = msgHandler.OnHotelCloseConnect(req.Message);
        }
        else if (req.CmdId == (UInt32)HotelGsCmdID.HotelPlayerCheckin)
        {
            reply = msgHandler.OnHotelCheckin(req.Message);
        }
        else if (req.CmdId == (UInt32)HotelGsCmdID.GssetFrameSyncRateNotifyCmdid)
        {
            reply = SetFrameSyncRateNotify(req.Message);
        }
        else if (req.CmdId == (UInt32)HotelGsCmdID.GsframeDataNotifyCmdid)
        {
            reply = FrameDataNotify(req.Message);
        }
        else if (req.CmdId == (UInt32)HotelGsCmdID.GsframeSyncNotifyCmdid)
        {
            reply = FrameSyncNotify(req.Message);
        }
        else if (req.CmdId == (UInt32)MvsGsCmdID.MvsJoinRoomReq)
        {
            reply = msgHandler.OnJoinRoom(req.Message);
        }
        else if (req.CmdId == (UInt32)MvsGsCmdID.MvsCreateRoomReq)
        {
            reply = msgHandler.OnCreateRoom(req.Message);
        }
        else if (req.CmdId == (UInt32)MvsGsCmdID.MvsLeaveRoomReq)
        {
            reply = msgHandler.OnLeaveRoom(req.Message);
        }
        else if (req.CmdId == (UInt32)MvsGsCmdID.MvsJoinOverReq)
        {
            reply = msgHandler.OnJoinOver(req.Message);
        }
        else if (req.CmdId == (UInt32)MvsGsCmdID.MvsJoinOpenReq)
        {
            reply = msgHandler.OnJoinOpen(req.Message);
        }
        else if (req.CmdId == (UInt32)MvsGsCmdID.MvsKickPlayerReq)
        {
            reply = msgHandler.OnKickPlayer(req.Message);
        }
        else if (req.CmdId == (UInt32)MvsGsCmdID.MvsNetworkStateReq)
        {
            reply = msgHandler.OnConnectStatus(req.Message);
        }
        else if (req.CmdId == (UInt32)MvsGsCmdID.MvsGetRoomDetailPush)
        {
            reply = msgHandler.OnRoomDetail(req.Message);
        }
        else if (req.CmdId == (UInt32)MvsGsCmdID.MvsSetRoomPropertyReq)
        {
            reply = msgHandler.OnSetRoomProperty(req.Message);
        }
        else
        {
            reply = new Reply()
            {
                Errno  = ErrorCode.NotImplemented,
                ErrMsg = string.Format("not found the cmdid:{0}", req.CmdId),
            };
        }

        response.CmdId  += 1;
        response.Message = ByteUtils.ObjectToByteString(reply);

        return(response);
    }
Example #14
0
 public abstract Package.Types.Frame DealMsg(Package.Types.Frame request);