private async void Login_Execute() { // Denne metode skal der hentes bruger data fra serveren // Den bruger data der hentes, skal sendes videre til næste view. Som er HostMenu. // Brugeren hente ned og bruger data tilføres et bruger objekt. IServerDataHandler handler = new ServerDataHandler(); IServerCommunicator Com = new ServerCommunicator(handler); if (await Com.SendDataReturnIsValid(Host, DataType.Host)) { IFromJSONParser Parser = new FromJsonParser(); var ServerHost = await Parser.DeserializedData <ReturnHostModel>(handler.LatestMessage); var rootPage = Navigation.NavigationStack.FirstOrDefault(); if (rootPage != null) { var page = (ServerHost.Events != null) ? new HostMainMenu(ServerHost, ServerHost.Events.ToList()) : new HostMainMenu(ServerHost); _memoryManager.SaveCookie(handler.LatestReceivedCookies, ServerHost.Name); Navigation.InsertPageBefore(page, Navigation.NavigationStack.First()); await Navigation.PopToRootAsync(); } } }
private void OnRecieveData(IAsyncResult ar) { try { int readbytes = mystream.EndRead(ar); if (readbytes > 0) { byte[] newbytes = new byte[readbytes]; Buffer.BlockCopy(readbuff, 0, newbytes, 0, readbytes); ServerDataHandler.HandelData(id, newbytes); } try { mystream.BeginRead(readbuff, 0, Constants.MAX_BUFFER_SIZE, new AsyncCallback(OnRecieveData), socket); } catch (Exception ex) { Close(); return; } } catch (Exception ex) { Program.Log("Error: {0}", ex); Close(); return; } }
static void SetupServer() { ServerTCP.clients = new List <Client>(Constants.MAX_PLAYERS); Types.tmpPlayers = new List <Types.TempPlayer>(Constants.MAX_PLAYERS); ServerDataHandler.InitMessages(); ServerTCP.InitializeNetwork(); }
private void ProcessReceive(SocketAsyncEventArgs e) { try { // check if the remote host closed the connection Socket token = (Socket)e.UserToken; if (e.BytesTransferred > 0 && e.SocketError == SocketError.Success) { //读取数据 byte[] data = new byte[e.BytesTransferred]; Array.Copy(e.Buffer, e.Offset, data, 0, e.BytesTransferred); lock (m_buffer) { m_buffer.AddRange(data); } do { //一个完整的包是包长(4字节)+包数据, //判断包的长度,前面4个字节. byte[] lenBytes = m_buffer.GetRange(0, 4).ToArray(); int packageLen = BitConverter.ToInt32(lenBytes, 0); if (packageLen <= m_buffer.Count - 4) { //包够长时,则提取出来,交给后面的程序去处理 byte[] rev = m_buffer.GetRange(4, packageLen).ToArray(); //从数据池中移除这组数据,为什么要lock,你懂的 lock (m_buffer) { m_buffer.RemoveRange(0, packageLen + 4); } //将数据包交给前台去处理 ServerDataHandler?.Invoke(rev); } else { //长度不够,还得继续接收,需要跳出循环 break; } } while (m_buffer.Count > 4); if (!token.ReceiveAsync(e)) { this.ProcessReceive(e); } } else { //ProcessError(e); ///服务器断开 } } catch (Exception xe) { Console.WriteLine(xe.Message); } }