/** * Creates an sends the Dungone response message type * @param player the player to get the message * @param response the String that is the dungeons response */ static void SendDungeonResponse(Player player, String response) { DungeonResponse msg = new DungeonResponse(); msg.response = response; MemoryStream outStream = msg.WriteData(player.Salt); try { player.Socket.Send(outStream.ToArray()); } catch (System.Exception) { RemoveClientByPlayer(player); } }
/** * Thread responsible for receiving all incoming data from the server * @param o form object reference */ private void ClientReceive(Object o) { MudClient form = (MudClient)o; while (form.bConnected == true) { try { byte[] buffer = new byte[4096]; int result; //listen for buffer result = form.clientSocket.Receive(buffer); if (result > 0) { //decode stream Msg m = Msg.DecodeStream(buffer, Salt, ShouldDecrypt); //Get message type and do approriate actiobn if (m != null) { Console.Write("Got a message: "); switch (m.mID) { case DungeonResponse.ID: { DungeonResponse dr = (DungeonResponse)m; form.AddDungeonText(dr.response, true); } break; case MapLayout.ID: { MapLayout ml = (MapLayout)m; DrawQueue.Enqueue(() => ParseMap(ml.mapInfo)); break; } case LoginResponse.ID: { LoginResponse lm = (LoginResponse)m; if (lm.loggedIn == "1") { //Login was successful start decrypting and start main game loginScreen.LoginResponse(lm.message, true); ShouldDecrypt = true; } else { //login failed, show failed message loginScreen.LoginResponse(lm.message, false); ShouldDecrypt = false; } } break; case PlayerLocations.ID: { PlayerLocations pl = (PlayerLocations)m; DrawQueue.Enqueue(() => UpdatePlayerLocations(pl.LocationString)); } break; case UpdateChat.ID: { UpdateChat uc = (UpdateChat)m; form.AddDungeonText(uc.message, false); } break; case SaltSend.ID: { SaltSend ss = (SaltSend)m; Salt = ss.salt; SendLoginMessage(); break; } case SaltRequest.ID: { SaltRequest sr = (SaltRequest)m; SendCreateUserMessage(); break; } default: break; } } } } catch (Exception ex) { //If a discconect happens restart the service form.bConnected = false; Console.WriteLine(U.NL("Lost server!") + ex); Application.Restart(); Environment.Exit(0); } } }