private void TcpServer_DatagramReceived(object sender, TcpDatagramReceivedEventArgs <byte[]> e) { if (e.Datagram != null && e.Datagram.Length > 0) { try { var message = Encoding.UTF8.GetString(e.Datagram); var request = Utils.Deserialize <RequestInfo>(message); if (request.Handler == "Connect") { tcpServer.Send(e.TcpClient, request, "连接成功!"); return; } var logger = new TcpServerLogger(rtbLog, request, tcpServer, e.TcpClient); var ctxRequest = new RequestContext(logger); ctxRequest.Request = request; Utils.ExecuteAsync(ctxRequest, e1 => { var ctx = e1.Argument as RequestContext; if (ctx == null) { return; } var handler = RequestHandler.GetHandler(ctx); if (handler == null) { ctx.Logger.WriteLog("不支持{0}的处理者!", ctx.Request.Handler); return; } e1.Result = handler.Execute(); }, e2 => { if (e2.Result != null) { tcpServer.Send(e.TcpClient, Utils.Serialize(e2.Result)); } }); } catch (Exception ex) { context.Logger.WriteLog("{0}接收异常,{1}", e.TcpClient.Client.RemoteEndPoint, ex.Message); } } Application.DoEvents(); }
void Update() { List <TcpClientState> toProcess; lock (Lock) { toProcess = new List <TcpClientState> (inbox); inbox.Clear(); } if (toProcess != null) { foreach (TcpClientState client in toProcess) { List <string> msgs = client.Prot.swap_msgs(); msgs.ForEach(delegate(string msg) { var sw = new Stopwatch(); sw.Start(); var t0 = sw.ElapsedMilliseconds; string response = rpc.HandleMessage(msg); var t1 = sw.ElapsedMilliseconds; byte[] bytes = prot.pack(response); var t2 = sw.ElapsedMilliseconds; server.Send(client.TcpClient, bytes); var t3 = sw.ElapsedMilliseconds; debugProfilingData ["handleRpcRequest"] = t1 - t0; debugProfilingData ["packRpcResponse"] = t2 - t1; }); } } }
void Update() { foreach (TcpClientState client in inbox.Values) { List <string> msgs = client.Prot.swap_msgs(); msgs.ForEach(delegate(string msg) { var sw = new Stopwatch(); sw.Start(); var t0 = sw.ElapsedMilliseconds; string response = rpc.HandleMessage(msg); var t1 = sw.ElapsedMilliseconds; byte[] bytes = prot.pack(response); var t2 = sw.ElapsedMilliseconds; server.Send(client.TcpClient, bytes); var t3 = sw.ElapsedMilliseconds; debugProfilingData["handleRpcRequest"] = t1 - t0; debugProfilingData["packRpcResponse"] = t2 - t1; TcpClientState internalClientToBeThrowAway; string tcpClientKey = client.TcpClient.Client.RemoteEndPoint.ToString(); inbox.TryRemove(tcpClientKey, out internalClientToBeThrowAway); }); } vr_support.PeekCommand(); }
static void server_PlaintextReceived(object sender, TcpDatagramReceivedEventArgs <string> e) { if (e.Datagram != "Received") { Console.Write(string.Format("Client : {0} --> ", e.TcpClient.Client.RemoteEndPoint.ToString())); Console.WriteLine(string.Format("{0}", e.Datagram)); server.Send(e.TcpClient, "Server has received you text : " + e.Datagram); } }
private void MsgSend(TcpClient _client, string _msg, bool _pauseFlag) { if (!_pauseFlag) { try { IPEndPoint ClientIP = (IPEndPoint)_client.Client.RemoteEndPoint; server.Send(_client, _msg); LogRefresh("服务器端 has sent messages to " + ipC.iPConfig[ClientIP.Address.ToString()] + ":", _msg, dic["测试命令模式"]); } catch (Exception ex) { log.Exception(ex); return; } } else { return; } }
public void KickOff() { var studentList = new List <StudentItem>(studentDic.Values); foreach (var item in studentList) { if (item.studentState != null) { tcpServer.Send(item.studentState, NetworkCommand.EXIT); //broadcaster.sendMessage(Command.EXIT); DeleteStudent(item.UserName); } } }
protected override void WriteLine(string message) { var rtbMessage = string.Format("{0:yy-MM-dd HH:mm:ss} {1}", DateTime.Now, message); if (!string.IsNullOrEmpty(message)) { rtbLog.AppendText(rtbMessage); rtbLog.AppendText(Environment.NewLine); } if (tcpServer != null && !ServerWrite) { var info = ResponseInfo.Create(request, message); tcpServer.Send(tcpClient, Utils.Serialize(info)); } System.Threading.Thread.Sleep(100); }
/// <summary> /// 服务器接受客户端消息时执行 /// </summary> /// <param name="sender"></param> /// <param name="e">接受数据参数-Tcpclient,byte[]</param> static void server_DatagramReceived(object sender, TcpDatagramReceivedEventArgs <byte[]> e) { //TODO int headData = DataHandleHelper.getHeadData(e.Datagram); byte[] receviceData = e.Datagram; string username; bool isExist; int battleCode; switch (headData) { case CommandParam.LOGIN_REQUEST: //登陆请求 username = DataHandleHelper.getStringParam(receviceData); UserInfo userInfo = new UserInfo(); isExist = ConectMySqldb.queryUserInfoByUserName(username, userInfo); if (isExist) { if (onLineList.ContainsKey(e.TcpClient) || onLineList.ContainsValue(username)) { userInfo = new UserInfo(); //已存在用户或客户端,返回空值 } else { onLineList.Add(e.TcpClient, username); } } else { userInfo = new UserInfo(); } //返回数据 server.Send(e.TcpClient, userInfo, CommandParam.LOGIN_RETURN); break; case CommandParam.LOADING_REQUEST: //载入请求 username = DataHandleHelper.getStringParam(receviceData); ReviewInfo reviewInfo = new ReviewInfo(); isExist = ConectMySqldb.queryReviewInfoByUserName(username, reviewInfo); if (!isExist) { reviewInfo = new ReviewInfo(); //不存在,返回空值 } //返回数据 server.Send(e.TcpClient, reviewInfo, CommandParam.LOAD_RETURN); break; case CommandParam.MATCH_REQUEST: //匹配请求 MatchInfo matchInfo = new MatchInfo(); if (linelist.Count == 0) { linelist.Add(e.TcpClient); matchInfo.isMatch = 0; matchInfo.battleCode = -1; } else if (linelist.Count == 1) { if (linelist.Contains(e.TcpClient)) { matchInfo.isMatch = 0; matchInfo.battleCode = -1; } else { TcpClient emeny = linelist.ElementAt(0); linelist.Remove(emeny); //移除第一个匹配的元素 TcpClient[] battle = new TcpClient[] { emeny, e.TcpClient }; battleList.Add(battle); matchInfo.isMatch = 1; matchInfo.battleCode = battleList.IndexOf(battle); //在对战列表的位置 } } else { matchInfo.isMatch = 0; matchInfo.battleCode = -1; } //返回数据 server.Send(e.TcpClient, matchInfo, CommandParam.MATCH_RETURN); break; case CommandParam.BATTLE_REQUEST: //战斗数据交换 battleCode = DataHandleHelper.getIntParam(receviceData); BattleInfo battleInfo = new BattleInfo(); battleInfo.ReadByBytes(receviceData); if (battleCode < 0) { return; //找不到战斗列表 } else { foreach (var p in battleList.ElementAt(battleCode)) { if (p != e.TcpClient) { TcpClient target = p; battleInfo.setBattelCode(battleCode); server.Send(target, battleInfo, CommandParam.BATTLE_RETURN); } } } break; case CommandParam.UPDATE_REQUEST: //更新数据 ReviewInfo updatereviewInfo = new ReviewInfo(); updatereviewInfo.ReadByBytes(receviceData); UpdateInfo updateInfo = new UpdateInfo(); bool isUpdate = ConectMySqldb.updateReviewInfo(updatereviewInfo); if (isUpdate) { updateInfo.isUpdate = 1; } else { updateInfo.isUpdate = 0; } //返回数据 server.Send(e.TcpClient, updateInfo, CommandParam.UPDATE_RETURN); break; case CommandParam.FINSH_REQUEST: battleCode = DataHandleHelper.getIntParam(receviceData); if (battleList.ElementAt(battleCode) != null) { battleList.RemoveAt(battleCode); } server.Send(e.TcpClient, "Gamerover"); break; default: server.Send(e.TcpClient, "参数错误"); break; } }