public static void whoIs() { String[] ids = null; String[] names = null; using (BinaryReader r = getResponse(CSCommon.buildCMDString(CSCommon.cmd_whois))) { ids = new String[r.ReadInt16()]; System.Diagnostics.Trace.WriteLine("Doing whois"); System.Diagnostics.Trace.WriteLine(ids.Length); names = new String[ids.Length]; for (int i = 0; i < ids.Length; i++) { System.Diagnostics.Trace.WriteLine("Iteration " + i); ids[i] = r.ReadString(); System.Diagnostics.Trace.WriteLine(ids[i]); names[i] = r.ReadString(); System.Diagnostics.Trace.WriteLine(names[i]); } } //using int choice = Common.GenerateMenu("Press ENTER on a user to send a private message to them", names, Common.getIncDecVol()); if (choice == -1) { return; } if (ids[choice].Equals(serverTag)) { SapiSpeech.speak("The first sign of insanity is talking to yourself. Sorry, we can't let you do that!", SapiSpeech.SpeakFlag.interruptable); } else { sendChatMessage(ids[choice]); } }
private static void configureJS(Guid guid) { if (!File.Exists("dev_" + guid.ToString() + ".tdv")) { SapiSpeech.speak("This joystick has not been configured yet. You will need to configure it before moving on.", SapiSpeech.SpeakFlag.noInterrupt); SapiSpeech.speak("We will now calibrate your joystick. First, press any button on your joystick to begin.", SapiSpeech.SpeakFlag.noInterrupt); while (!dxInput.isJSButtonHeldDown()) { Application.DoEvents(); } SapiSpeech.speak("Please make sure your joystick is centered.", SapiSpeech.SpeakFlag.noInterrupt); dxInput.JSXCenter = dxInput.JSState.X; dxInput.JSYCenter = dxInput.JSState.Y; dxInput.JSZCenter = dxInput.JSState.Z; dxInput.JSRZCenter = dxInput.JSState.RotationZ; BinaryWriter s = new BinaryWriter(new FileStream("dev_" + guid.ToString() + ".tdv", FileMode.Create)); s.Write(dxInput.JSXCenter); s.Write(dxInput.JSYCenter); s.Write(dxInput.JSZCenter); s.Write(dxInput.JSRZCenter); s.Close(); SapiSpeech.speak("Your joystick has been successfully configured.", SapiSpeech.SpeakFlag.noInterrupt); } else { BinaryReader s = new BinaryReader(new FileStream("dev_" + guid.ToString() + ".tdv", FileMode.Open)); dxInput.JSXCenter = s.ReadInt32(); dxInput.JSYCenter = s.ReadInt32(); dxInput.JSZCenter = s.ReadInt32(); dxInput.JSRZCenter = s.ReadInt32(); s.Close(); } }
public static void whoIs() { String[] ids = null; String[] names = null; using (BinaryReader r = getResponse(CSCommon.buildCMDString(CSCommon.cmd_whois))) { ids = new String[r.ReadInt16()]; System.Diagnostics.Trace.WriteLine("Doing whois"); System.Diagnostics.Trace.WriteLine(ids.Length); names = new String[ids.Length]; for (int i = 0; i < ids.Length; i++) { System.Diagnostics.Trace.WriteLine("Iteration " + i); ids[i] = r.ReadString(); System.Diagnostics.Trace.WriteLine(ids[i]); names[i] = r.ReadString(); System.Diagnostics.Trace.WriteLine(names[i]); } } //using int choice = Common.GenerateMenu("Press ENTER on a user to send a private message to them", names, Common.getIncDecVol()); if (choice == -1) { return; } if (ids[choice].Equals(serverTag)) { SapiSpeech.speak("Le premier signe de démence est de se parler à soi-même. Désolé, on ne peut vous laisser faire ça!", SapiSpeech.SpeakFlag.interruptable); } else { sendChatMessage(ids[choice]); } }
public static void sendPublicChatMessage(String message) { if (!String.IsNullOrEmpty(message)) { SapiSpeech.speak("You say: " + message, SapiSpeech.SpeakFlag.interruptable); sendCommand(CSCommon.cmd_chat, false, message); } }
public static void copyMessage() { if (chatMessages.Count == 0) { return; } Common.mainGUI.copyMessage(); SapiSpeech.speak("Copied message " + chatMessages[chatPointer], SapiSpeech.SpeakFlag.interruptableButStop); }
public static void nextMessage() { lock (chatLocker) { if (chatMessages.Count == 0) { return; } SapiSpeech.speak(chatMessages[(chatPointer == chatMessages.Count - 1) ? chatPointer : ++chatPointer], SapiSpeech.SpeakFlag.interruptableButStop); } }
/// <summary> /// Sends a chat message to the room. /// </summary> public static void sendChatMessage() { SapiSpeech.speak("Enter message", SapiSpeech.SpeakFlag.interruptable); String chatMsg = Common.mainGUI.receiveInput(); if (!chatMsg.Equals("")) { sendPublicChatMessage(chatMsg); } else //canceled chat { SapiSpeech.speak("Canceled", SapiSpeech.SpeakFlag.interruptable); } }
/// <summary> /// Sends a chat message to the specified tag. /// </summary> /// <param name="tag">The ID of the player to send the message to</param> public static void sendChatMessage(String tag) { SapiSpeech.speak("Enter message", SapiSpeech.SpeakFlag.interruptable); String chatMsg = Common.mainGUI.receiveInput(); if (!chatMsg.Equals("")) { SapiSpeech.speak("You say: " + chatMsg, SapiSpeech.SpeakFlag.interruptable); sendCommand(CSCommon.cmd_chat, true, tag, chatMsg); } else //canceled chat { SapiSpeech.speak("Canceled", SapiSpeech.SpeakFlag.interruptable); } }
/// <summary> /// Sends destroyed indication to server /// </summary> /// <param name="name">The name of the killer</param> /// <param name="tag">The tag of the killer</param> public void indicateDestroyedBy(String name, String tag) { if (doneDestroyedBy) { return; } doneDestroyedBy = true; if (isSender()) { if (!id.StartsWith("B-", StringComparison.OrdinalIgnoreCase)) { SapiSpeech.speak("Vous avez été détruit par " + name, SapiSpeech.SpeakFlag.interruptable); } Client.sendCommand(CSCommon.cmd_serverMessage, this.name + " was poned by " + name); if (!isBot() && tag != null) { Client.sendCommand(CSCommon.cmd_updatePoints, tag); } } }
private static void processRCV() { try { while (live) { if (!CSCommon.isLiveConnection(client)) { live = false; SapiSpeech.speak("Error: Server crash.", SapiSpeech.SpeakFlag.noInterrupt); Common.exitMenus = true; Common.repop(); return; } MemoryStream stream = null; //Bytes have to be explicitly copied into new stream since cmds is closed to save memory later on, so we'll lose rcvPauseData. stream = CSCommon.getData(client); BinaryReader cmds = null; if (stream != null) { cmds = new BinaryReader(stream); } if (cmds != null) { sbyte t; long start = 0; //start position of current packet while (cmds.BaseStream.Length > cmds.BaseStream.Position) { start = cmds.BaseStream.Position; System.Diagnostics.Trace.WriteLine(String.Format("S: {0}, L: {1}", start, cmds.BaseStream.Length)); t = cmds.ReadSByte(); if (t == 1) { byte command = cmds.ReadByte(); System.Diagnostics.Trace.WriteLine("co " + command); switch (command) { case CSCommon.cmd_addMember: addMember(cmds.ReadString(), cmds.ReadString()); break; case CSCommon.cmd_removeMember: removeMember(cmds.ReadString()); break; case CSCommon.cmd_resp: int respLength = cmds.ReadInt32(); responseStream = new byte[respLength]; cmds.BaseStream.Read(responseStream, 0, respLength); waitingForResponse.Set(); break; case CSCommon.cmd_notifyDemo: DSound.PlaySound(DSound.LoadSound(DSound.NSoundPath + "\\cd3.wav"), true, false); break; case CSCommon.cmd_newval: SelfVoice.purge(true); int amount = cmds.ReadInt32(); SelfVoice.NLS("#" + amount + "&points.wav", true, true); addChatMessage(String.Format("You earned {0} point{1}", amount, (amount == 1) ? "" : "s")); break; case CSCommon.cmd_position: next = cmds.ReadInt64(); addOns = processAddOns(cmds); break; case CSCommon.cmd_chat: MessageType type = (MessageType)cmds.ReadByte(); if (type == MessageType.normal) { DSound.PlaySound(chatSound, true, false); } else if (type == MessageType.enterRoom) { DSound.PlaySound(chatEnterSound, true, false); } else if (type == MessageType.leaveRoom) { DSound.PlaySound(chatLeaveSound, true, false); } else if (type == MessageType.privateMessage) { DSound.PlaySound(privateMessageSound, true, false); } else { DSound.PlaySound(serverMessageSound, true, false); } String incomingChatMessage = cmds.ReadString(); SapiSpeech.speak(incomingChatMessage, SapiSpeech.SpeakFlag.interruptable); addChatMessage(incomingChatMessage); Common.mainGUI.addToHistory(incomingChatMessage); break; case CSCommon.cmd_serverMessage: String incomingServerMessage = cmds.ReadString(); SapiSpeech.speak(incomingServerMessage, SapiSpeech.SpeakFlag.interruptable); addChatMessage(incomingServerMessage); break; case CSCommon.cmd_forceDisconnect: //Player was disconnected from the server //By the server itself and not through an in-game event, //so if we receive this command, we are being told to wipe our copy of the player in question. //Still, the server will send forceDisconnect even if object has already been disconnected //due to in-game event. This is ok since if the object is already gone, //this command will do nothing. It is just a redundancy check, more or less. String idToTerminate = cmds.ReadString(); Projector pToTerm = Interaction.objectAt(idToTerminate); if (pToTerm != null) { pToTerm.requestingTerminate(); } Interaction.clearLocks(idToTerminate); break; case CSCommon.cmd_requestCreate: //Response from server for requestCreate command sent by client. Interaction.createPlayer(cmds.ReadString(), cmds.ReadInt32()); addSender(Mission.player.id); if (addOns != null) { Mission.player.setAddOns(addOns); } addOns = null; if (Options.mode == Options.Modes.teamDeath) { Mission.player.team = Options.team; } Interaction.startMultiplayerGame(); break; case CSCommon.cmd_distributeServerTag: Projector o = Interaction.createObjectFromServer(cmds.ReadString(), cmds.ReadString(), OnlineRole.receiver, (ObjectType)cmds.ReadByte()); System.Diagnostics.Trace.WriteLine("Received request to create opponent " + o.name); if (Options.mode == Options.Modes.teamDeath) { o.team = (Projector.TeamColors)cmds.ReadInt32(); } AddOnArgs[] distAdd = processAddOns(cmds); if (distAdd != null) { o.setAddOns(distAdd); } break; case CSCommon.cmd_createBot: String createBotId = cmds.ReadString(); String createBotName = cmds.ReadString(); Projector bot = Interaction.createObjectFromServer(createBotId, createBotName, OnlineRole.bot, (ObjectType)cmds.ReadByte()); //will create bot or update current receiver to bot status. addSender(bot.id); break; case CSCommon.cmd_startGame: hostStartedGame = true; System.Diagnostics.Trace.WriteLine("Host started game"); break; case CSCommon.cmd_gameEnded: Options.serverEndedGame = true; break; } //switch System.Diagnostics.Trace.WriteLine("Command: " + t); continue; } //if command System.Diagnostics.Trace.Write(String.Format("Stream position: {0}, start: {1}, Char: {2} ", (int)cmds.BaseStream.Position, start, t)); int size = cmds.ReadInt32(); //total update size System.Diagnostics.Trace.WriteLine("Size: " + size); int temSize = size; String tag = cmds.ReadString(); System.Diagnostics.Trace.WriteLine(tag + " queuing data..."); Projector p = null; size = size - (int)(cmds.BaseStream.Position - start); byte[] buffer = null; try { buffer = new byte[size]; } catch (OverflowException) { throw new OverflowException(String.Format("Size: {0}, Stream position: {1}, start: {2}, original size: {3} Char: {4}", size, (int)cmds.BaseStream.Position, start, temSize, t)); } cmds.BaseStream.Read(buffer, 0, size); //Object could have been deleted by the time this command is reached if ((p = Interaction.objectAt(tag)) != null) { System.Diagnostics.Trace.WriteLine("Object found. sending queue"); p.queueData(t, buffer); } //if object exists else { System.Diagnostics.Trace.WriteLine("Object not found."); } } //while more data to read cmds.Close(); } //if got data Thread.Sleep(50); } //while live connection } catch (Exception e) { Common.handleError(e); } //catch finally { releaseConnection(); } }
public static bool connect(String host, String callSign, int port) { ports = new int[] { 4444, 4445, 4567, 6969, 32000 }; if (dataLocker == null) { dataLocker = new object(); } if (chatLocker == null) { chatLocker = new object(); } if (chatMessages == null) { chatMessages = new List <String>(); } if (members == null) { members = new List <ChatRoomMember>(); } chatPointer = 0; chatSound = DSound.LoadSound(DSound.SoundPath + "\\chat1.wav"); chatEnterSound = DSound.LoadSound(DSound.SoundPath + "\\chat2.wav"); chatLeaveSound = DSound.LoadSound(DSound.SoundPath + "\\chat3.wav"); privateMessageSound = DSound.LoadSound(DSound.SoundPath + "\\chat4.wav"); serverMessageSound = DSound.LoadSound(DSound.SoundPath + "\\chat5.wav"); senders = new Dictionary <string, ClientRecord>(); waitingForResponse = new AutoResetEvent(false); isConnected = false; error = false; live = false; client = new TcpClient(); int i = (port != 0) ? Array.IndexOf(ports, port) : 0; int time = 0; while (i < ports.Length) { error = false; time = 0; client.BeginConnect(host, port = ports[i++], new AsyncCallback(connectedEvent), null); while (!isConnected && !error) { Application.DoEvents(); if (time >= 3000) { endConnect(); //stop trying to connect on this port break; } time += 100; Thread.Sleep(100); } if (isConnected) { break; } } //search ports if (!isConnected || error) { return(false); } Options.writeToFile(); try { using (BinaryWriter writer = new BinaryWriter(new MemoryStream())) { writer.Write(callSign); writer.Flush(); CSCommon.sendData(client, writer); } //using LoginMessages resp = LoginMessages.none; using (BinaryReader reader = new BinaryReader(CSCommon.getData(client, 5000))) { resp = (LoginMessages)reader.ReadInt32(); m_messages = resp; if ((resp & LoginMessages.serverAssignedTag) == LoginMessages.serverAssignedTag) { serverTag = reader.ReadString(); String messageOfTheDay = reader.ReadString(); if ((resp & LoginMessages.messageOfTheDay) == LoginMessages.messageOfTheDay) { // We now need to speak the message and then show an input box for the user to // press ENTER to continue. This is because some screen readers // Don't have a way to stop the running thread. SapiSpeech.speak("[Welcome message]: " + messageOfTheDay + " (press ENTER to continue)", SapiSpeech.SpeakFlag.interruptable); Common.mainGUI.receiveInput().Trim(); } System.Diagnostics.Trace.WriteLine("Server sent tag: " + serverTag); } } //using if ((resp & LoginMessages.demo) == LoginMessages.demo) { BPCSharedComponent.ExtendedAudio.DSound.playAndWait(BPCSharedComponent.ExtendedAudio.DSound.NSoundPath + "\\cd" + Common.getRandom(1, 2) + ".wav"); } if ((resp & LoginMessages.noCallSign) == LoginMessages.noCallSign) { BPCSharedComponent.ExtendedAudio.DSound.playAndWait(BPCSharedComponent.ExtendedAudio.DSound.NSoundPath + "\\ncs.wav"); } if ((resp & LoginMessages.badVersion) == LoginMessages.badVersion) { SapiSpeech.speak("There is a newer version of TDV available. Please update before logging on.", SapiSpeech.SpeakFlag.noInterrupt); return(false); } if ((resp & LoginMessages.wrongCredentials) == LoginMessages.wrongCredentials) { BPCSharedComponent.ExtendedAudio.DSound.playAndWait(BPCSharedComponent.ExtendedAudio.DSound.NSoundPath + "\\pw2.wav"); return(false); } } catch (IOException) { error = true; } catch (TimeoutException) { error = true; } if (error) { return(false); } if (log) { theFile = new StreamWriter(Addendums.File.appPath + "\\server_output.log"); } live = true; processThread = new Thread(processRCV); processThread.Start(); return(true); }
public static bool connect(String host, String password, int port, String tag) { System.Diagnostics.Trace.WriteLine("Server tag is " + tag); // ports = new int[]{4444, 4445, 4567, 6969, 32000 }; ports = new int[] { 31111 }; if (dataLocker == null) { dataLocker = new object(); } if (chatLocker == null) { chatLocker = new object(); } if (chatMessages == null) { chatMessages = new List <String>(); } if (members == null) { members = new List <ChatRoomMember>(); } chatPointer = 0; chatSound = DSound.LoadSound(DSound.SoundPath + "\\chat1.wav"); chatEnterSound = DSound.LoadSound(DSound.SoundPath + "\\chat2.wav"); chatLeaveSound = DSound.LoadSound(DSound.SoundPath + "\\chat3.wav"); privateMessageSound = DSound.LoadSound(DSound.SoundPath + "\\chat4.wav"); serverMessageSound = DSound.LoadSound(DSound.SoundPath + "\\chat5.wav"); senders = new Dictionary <string, ClientRecord>(); waitingForResponse = new AutoResetEvent(false); isConnected = false; error = false; live = false; client = new TcpClient(); serverTag = tag; int i = (port != 0) ? Array.IndexOf(ports, port) : 0; int time = 0; while (i < ports.Length) { error = false; time = 0; client.BeginConnect(host, port = ports[i++], new AsyncCallback(connectedEvent), null); while (!isConnected && !error) { Application.DoEvents(); if (time >= 3000) { endConnect(); //stop trying to connect on this port break; } time += 100; Thread.Sleep(100); } if (isConnected) { break; } } //search ports if (!isConnected || error) { return(false); } Options.writeToFile(); try { SslStream ssl = null; using (BinaryWriter writer = new BinaryWriter(new MemoryStream())) { writer.Write((int)0); System.Diagnostics.Trace.WriteLine("After int: " + writer.BaseStream.Length); writer.Write(Convert.ToSingle(Common.applicationVersion)); writer.Write(tag); System.Diagnostics.Trace.WriteLine("Tag is now " + tag); if (password != null) { writer.Write(password); } writer.Flush(); System.Diagnostics.Trace.WriteLine("After password: "******"bpcprograms.com"); writer.BaseStream.Position = 0; writer.Write((int)(writer.BaseStream.Length - 4)); writer.Flush(); System.Diagnostics.Trace.WriteLine("After data size print " + writer.BaseStream.Length); System.Diagnostics.Trace.WriteLine("SSL packet size: " + (writer.BaseStream.Length - 4)); writer.BaseStream.Position = 0; ((MemoryStream)writer.BaseStream).WriteTo(ssl); } //using LoginMessages resp = LoginMessages.none; using (BinaryReader reader = new BinaryReader(CSCommon.getData(client, 5000))) { resp = (LoginMessages)reader.ReadInt32(); m_messages = resp; if ((resp & LoginMessages.serverAssignedTag) == LoginMessages.serverAssignedTag) { serverTag = reader.ReadString(); System.Diagnostics.Trace.WriteLine("Server sent tag: " + serverTag); } } //using if ((resp & LoginMessages.demo) == LoginMessages.demo) { BPCSharedComponent.ExtendedAudio.DSound.playAndWait(BPCSharedComponent.ExtendedAudio.DSound.NSoundPath + "\\cd" + Common.getRandom(1, 2) + ".wav"); } if ((resp & LoginMessages.noCallSign) == LoginMessages.noCallSign) { BPCSharedComponent.ExtendedAudio.DSound.playAndWait(BPCSharedComponent.ExtendedAudio.DSound.NSoundPath + "\\ncs.wav"); } if ((resp & LoginMessages.badVersion) == LoginMessages.badVersion) { SapiSpeech.speak("There is a newer version of TDV available. Please update before logging on.", SapiSpeech.SpeakFlag.noInterrupt); return(false); } if ((resp & LoginMessages.wrongCredentials) == LoginMessages.wrongCredentials) { BPCSharedComponent.ExtendedAudio.DSound.playAndWait(BPCSharedComponent.ExtendedAudio.DSound.NSoundPath + "\\pw2.wav"); return(false); } } catch (IOException) { error = true; } catch (TimeoutException) { error = true; } if (error) { return(false); } if (log) { theFile = new StreamWriter(Addendums.File.appPath + "\\server_output.log"); } live = true; processThread = new Thread(processRCV); processThread.Start(); return(true); }