मेरे पास एक पायथन चैटर्स है जो कनेक्शन के लिए मुड़ और ऑटोबहन websockets का उपयोग करता है।घुमावदार websocket chatserver openid प्रमाणीकरण
factory = MessageServerFactory("ws://localhost:9000", debug=debug, debugCodePaths=debug)
factory.protocol = MessageServerProtocol
factory.setProtocolOptions(allowHixie76=True)
listenWS(factory)
इस
सर्वर
import logging
from autobahn.websocket import WebSocketServerFactory, WebSocketServerProtocol
from DatabaseConnector import DbConnector
from LoginManager import LoginManager
from MessageTypes import MessageParser
class MessageServerProtocol(WebSocketServerProtocol):
def onOpen(self):
self.factory.register(self)
def onMessage(self, msg, binary):
if not binary:
self.factory.processMessage(self, msg)
def connectionLost(self, reason):
WebSocketServerProtocol.connectionLost(self, reason)
self.factory.unregister(self)
class MessageServerFactory(WebSocketServerFactory):
logging.basicConfig(filename='log/dastan.log',format='%(levelname)s:%(message)s',level=logging.WARNING)
def __init__(self, url, debug=False, debugCodePaths=False):
WebSocketServerFactory.__init__(self, url, debug=debug, debugCodePaths=debugCodePaths)
self.clients = {}
self.connector = DbConnector()
self.messages = MessageParser()
self.manager = LoginManager()
def register(self, client):
print "%s connected" % client.peerstr
def unregister(self, client):
if self.clients.has_key(client):
self.processLogout(client)
print "%s disconnected" % client.peerstr
def processMessage(self, client, msg):
try:
msg = self.messages.parseMessage(msg)
action = msg['Type']
except ValueError, e:
logging.warning("[Parse]:%s", e.message)
client.sendMessage(self.messages.createErrorMessage("could not parse your message"))
return
if action == "ChatMessage":
self.processChatMessage(client, msg)
# elif action == "Login":
# self.processLogin(client, msg)
# elif action == "Logout":
# self.processLogout(client)
elif action == "OpenId":
self.manager.processLogin(client,msg)
def processChatMessage(self, client, msg):
if not self.clients.has_key(client):
client.sendMessage(self.messages.createErrorMessage('Not authorized'))
return
if not msg['Message']:
client.sendMessage(self.messages.createErrorMessage('Invalid Message'))
return
if not msg['Recipient']:
client.sendMessage(self.messages.createErrorMessage('Invalid Recipient'))
return
if msg['Recipient'] in self.clients.values():
for c in self.clients:
if self.clients[msg['Recipient']]:
c.sendMessage(self.messages.chatMessage(msg['Sender'], msg['Message']))
print "sent message from %s to %s: '%s' .." % (msg['Sender'], msg['Recipient'], msg['Message'])
else:
client.sendMessage(self.messages.createErrorMessage('User not registered'))
def checkSender(self, user, client):
if user in self.clients.values() and self.clients[client] == user:
return
else:
self.clients[client] = user
एक स्वतंत्र HTML/JS ग्राहक से कनेक्ट करने और बातचीत संदेश भेज सकते हैं। लेकिन मैं websocket खोलने से पहले, एक खुली आईडी प्रमाणीकरण (सर्वर द्वारा प्रदर्शन) को लागू करना चाहता हूं।
var wsuri = "ws://192.168.0.12:9000";
if ("WebSocket" in window) {
sock = new WebSocket(wsuri);
} else if ("MozWebSocket" in window) {
sock = new MozWebSocket(wsuri);
} else {
log("Browser does not support WebSocket!");
window.location = "http://autobahn.ws/unsupportedbrowser";
}
if (sock) {
sock.onopen = function() {
log("Connected to " + wsuri);
}
sock.onclose = function (e) {
log("Connection closed (wasClean = " + e.wasClean + ", code = " + e.code + ", reason = '" + e.reason + "')");
sock = null;
}
sock.onmessage = function (e) {
receive(e.data);
}
}
के रूप में मैं अजगर करने के लिए नया हूँ/मुड़ मैं ऐसा करने के तरीके और उदाहरण ज्यादातर authentification के बिना केवल WebSocket चैटरूम दिखाने पता नहीं है:
इस ऑनलोड कार्य है।
मैं ओपनिड को सही ढंग से कैसे कार्यान्वित कर सकता हूं? क्योंकि इसे पुनर्निर्देशन की भी आवश्यकता है, जो डब्ल्यूएस कनेक्शन तोड़ देगा।
पुनर्निर्देशन के बाद तक ws को खोलें नहीं ... – carter