Ejemplo n.º 1
0
        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();
                }
            }
        }
Ejemplo n.º 2
0
 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;
     }
 }
Ejemplo n.º 3
0
        static void SetupServer()
        {
            ServerTCP.clients = new List <Client>(Constants.MAX_PLAYERS);
            Types.tmpPlayers  = new List <Types.TempPlayer>(Constants.MAX_PLAYERS);

            ServerDataHandler.InitMessages();
            ServerTCP.InitializeNetwork();
        }
Ejemplo n.º 4
0
        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);
            }
        }