private OperationResponse HandleOperationRegisterWorld(OperationRequest operationRequest) { var operation = new RegisterWorld(Protocol, operationRequest); if (!operation.IsValid) { return new OperationResponse(operationRequest.OperationCode) { ReturnCode = (short)ResultCode.InvalidOperationParameter, DebugMessage = operation.GetErrorMessage() } } ; if (!social.AddWorld(operation.WorldId, this)) { return new OperationResponse(operationRequest.OperationCode) { ReturnCode = (short)ResultCode.AlreadyRegistered } } ; lock (listeningWorlds) this.listeningWorlds.Add(operation.WorldId); return(null); }
private void handleWorld(object client) { TcpClient tcpClient = (TcpClient)client; World world = new World(tcpClient); NetworkStream clientStream = tcpClient.GetStream(); byte[] message = new byte[4096]; int bytesRead; while (true) { bytesRead = 0; try { bytesRead = clientStream.Read(message, 0, 4096); } catch { break; } if (bytesRead == 0) { break; } IPacket packet = null; switch (message[0]) { case (byte)OpCodes.WL_REGISTER_WORLD: packet = new RegisterWorld(); break; case (byte)OpCodes.WL_SET_DATA: packet = new SetData(); break; } packet.Write(message, 1, bytesRead - 1); packet.Handle(world); } Log.Error("World.Listener", world.Name + " disconnected!"); try { Program.worlds.Remove((byte)world.Id); lock (Worlds) { Worlds.Remove(world.Id); } tcpClient.Close(); } catch (Exception e) { Log.Error("World.Listener", "Failed to remove disconnected world, exception:\n\n"); Console.WriteLine(e.ToString()); return; } }