/// <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); }
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; } }
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); } }
/// <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); }
/// <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(); }
/// <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); }
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); } }
/// <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); }
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); }
/// <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); }
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); }
public abstract Package.Types.Frame DealMsg(Package.Types.Frame request);